package com.abc;

import java.util.Collection;
import java.util.InputMismatchException;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

import com.abc.files.LoadRepo;
import com.abc.model.EffortReport;
import com.abc.model.PersonYearEffort;
import com.abc.model.Project;
import com.abc.model.ProjectYear;
import com.abc.model.ReportRepository;

public class Main 
{ 
	static int operation;
	static Scanner input = new Scanner(System.in);

	private static ReportRepository repository = new ReportRepository();

	public static void start() {

		initRepo();

		runMenu();

	}
	private static void runMenu() 
	{
		//Menu
		try {
		do
		{
			System.out.println("Menu główne aplikacji A");
			System.out.println("1- generuj raport A\n2- generuj raport B\n3- odśwież dane\n4 - exit");
			System.out.println("Wybierz opcję");
			operation = input.nextInt();

			if (operation==1)
			{
				listYears();
				runMenu2();
				brakOpcji2();
			}
			else if (operation==2)
			{
				//				wylistowanie projektów
				//				wygenerowanie raportu B	
				listDevs();
				runMenu2();
				brakOpcji2();
			}
			else if (operation==3)
			{
				//				ponowne wczytanie danych
				System.out.println("Dane zostały ponownie wczytane");
				runMenu2();
				brakOpcji2();
			}
			else if (operation==4)
			{
				//				kończenie aplikacji				
			}
			else 
			{
				System.out.println("Niepoprawna operacja! Wybierz jeszcze raz!");				
			}
	}
		while (operation!=4);
		}catch (InputMismatchException e) {
			System.out.println("Niepoprawna operacja!!!Trzeba było nie wciskać tego klawisza!!Nastąpi wyjście z programu!!");
		}

		} 
	
	private static void runMenu2()
	{ try {
		System.out.println("1-Powrót do menu \n4 - exit");
		System.out.println("Wybierz opcję");
		operation = input.nextInt();
	} catch (InputMismatchException e) {
		  System.out.println("Niepoprawna operacja!!!");
	  }
	}
	


	private static void initRepo() 
	{
		repository = new ReportRepository();
		LoadRepo loader = new LoadRepo();
		String folder = "Dane_testowe";
		boolean loaded = loader.addFilesToRepo(repository, folder);
		if(!loaded) {
			System.out.println("no files in : " + folder);
		}
	}
	
	private static void listYears() {

		System.out.println(getYears());
		System.out.println("Wybierz rok");
		String wybranyRok=Integer.toString(input.nextInt());
		System.out.println("Raport: Liczba godzin pracy w danym miesiącu dla projektów");
		new EffortReport(repository, wybranyRok);
	}
	
	private static Set<String> getYears() {
		return repository.getYears();
	}

	private static void listDevs() {try {

		Map<String, Project> projects = repository.getProjects();
		System.out.println(projects.toString());
//		Wybranie projektu 1
		System.out.println("Wpisz numer projektu");
		String wybranyProjekt=Integer.toString(input.nextInt()); 
		Project projectOne = projects.get(wybranyProjekt);
		Set<String> years = projectOne.getProjectYears().keySet();
		System.out.println("Raport: Liczba godzin pracownika w danym miesiącu dla wybranego projektu");
		for(String year : years) 
		{
			Collection<PersonYearEffort> efforts = projectOne.getProjectYears().get(year).getDeveloperYearEfforts();
			for(PersonYearEffort devEffort : efforts) {
				System.out.println(devEffort.toString());

			}
		}
	  } catch (NullPointerException e) {
		  System.out.println("Nie ma takiego projektu!!");
	  }
		
	}
	
	private static void brakOpcji2()
	{
		if ((operation!=1)&(operation!=4))
		{
			do
			{
				System.out.println("Nie ma takiej opcji wpisz ponownie");
				operation = input.nextInt();
				
			}while((operation!=1)&(operation!=4));
		}
	}

	
//	//TODO usunac
//	private static Project projData;
//	
//	
//	
//	private static void initRepoToDelete(String expectedName, String[] projYears, String dev) {
//		projData = initProj(expectedName, projYears, dev);
//		repository.addProject(projData);
//	}
//
//	private static Project initProj(String projName, String[] projYears, String devName) {
//		
//		String devOne = "devOne";
//		
//		Project one = new Project(projName);
//		
//		for(int i = 0; i < projYears.length; i++) {
//			
//			PersonYearEffort devYear = new PersonYearEffort(devOne, projYears[i]);
//			devYear.addEffort(2, 50.2);
//			devYear.addEffort(3, 60);
//			devYear.setEffort(4, 190);
//			
//			ProjectYear pYear = new ProjectYear();
//			pYear.addPersonEfforts(devYear);
//			
//			one.addProjectYear(pYear);
//			
//		}
//		return one;
//	
//	}
}




